package com.cictec.middleware.gps.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cictec.middleware.commons.utils.Result;
import com.cictec.middleware.commons.utils.ResultUtil;
import com.cictec.middleware.core.pojo.MiddlewarePosition;
import com.cictec.middleware.gps.engine.position.TerminalPositionListener;
import com.cictec.middleware.gps.engine.thread.PointExecutorManager;

/**
 * 位置信息入口类
 * 
 * @author Administrator
 *
 */
@RestController
public class MiddlewarePositionController {

	@Autowired
	private TerminalPositionListener terminalPositionListener;
	@Autowired
	private PointExecutorManager pointExecutorManager;
	
	/**
	 *【GPS位置信息】处理接口调用
	 * 
	 * @param position
	 */
	@RequestMapping(value = "/gps/positionUpload")
	public Result positionUpload(@RequestBody MiddlewarePosition position) {
		return doHandler(position);
	}
	
	/**
	 * 【进出站信息】处理接口调用
	 * 
	 * @param position
	 */
	@RequestMapping(value = "/gps/enterOutUpload")
	public Result enterOutUpload(@RequestBody MiddlewarePosition position){
		return doHandler(position);
	}
	
	private Result doHandler(MiddlewarePosition position){
		/**
		 * 目前针对单节点distribute服务实现，后边在扩展多节点distribute
		 */
		/*
		 * 处理流程：
		 *  、原始数据存储（目前存储到redis）
		 * 	、数据分析：
		 * 		、获取对应的middleware-gps位置分析服务（实现相同区域【市区】设备在同一个GPS服务进行处理）
		 *  、结果信息分发处理：
		 *  	、分析后数据存储到redis
		 *  	、activemq 【topic】推送手机（预测）app
		 *  	、activeMq 【queue】第三方公司
		 *  	、apollo 推送web调度
		 */
		
//		terminalPositionListener.onPosition(position);	// 当前线程处理位置点（组装TimingPoint对象后，在通过多线程处理位置点信息），这样可能会产生当前线程的堵塞
		pointExecutorManager.execute(position);			// 数据处理（组装TimingPoint对象）放在位置点处理线程内部完成
		return ResultUtil.getSuccessResult(position);
	}


}
